package BaseDatos;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


import Objetos.EstadoCliente;
import Objetos.Sesion;
import java.sql.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

/**
 *
 * @author administrador
 */
public class BaseDatos {
    static Connection con;
    /**
     * 
     */
    public BaseDatos(){
    }
    
    /**
     * 
     */
    private void addLog(){
        try{ 
            Connection conn = getConexionDiga();
            String sql   = "INSERT INTO Diga.Log VALUES() ";
            String where = "";
            String mnsj  = "";
            PreparedStatement ps = conn.prepareStatement(sql+where);
            boolean result = ps.execute();
            
            
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("e = " + e);
        }
    }
    
    /**
     * Realiza una conexion a la BD FoxPro.
     * No recibe parametros y retorna un objeto tipo DataSource.
     * @return objeto tipo DataSource para realizar conexion a la BD FoxPro
     * @throws NamingException
     */
    public static DataSource getFoxPro() throws NamingException {
        Context c = new InitialContext();
        return (DataSource) c.lookup("java:comp/env/FoxPro");
    }
    /**
     * Realiza una conexion a la BD Diga.
     * No recibe parametros y retorna un objeto tipo Connection.
     * @return objeto estatico tipo Conecction conexion a la BD Diga.
     */
    public static Connection getConexionDiga() {
        try{
            con=DriverManager.getConnection("jdbc:mysql://192.168.1.14:3306/Diga","ltabares","7612");
        }catch(Exception e){
            System.out.println("error aqui "+e);
        }
        return con;
    }
    /**
     * Realiza una conexion a la BD Bd.
     * No recibe parametros y retorna un objeto tipo Connection.
     * @return objeto estatico tipo Conecction conexion a la BD Bd. 
     */
    public static Connection getConexionBd() {
        try{
            con=DriverManager.getConnection("jdbc:mysql://192.168.1.14:3306/Bd","ltabares","7612");
        }catch(Exception e){
            System.out.println("error aqui "+e);
        }
        return con;
    }
     /**
      * Obtiene un cliente con todas sus caracteristicas.
     * Recibe variable tipo Integer y retorna objeto tipo EstadoCliente con sus parametros seteados.
     * Busca en BD todos los registros que coincida con dicha variable y setea los parametros al objeto tipo EstadoCliente.
     * @param _codigo Variable tipo Integer distinta a 0.
     * @return objeto tipo EstadoCliente con sus parametros seteados.
     */
    public EstadoCliente getEstadoCliente(int _codigo){
         try{
            Connection conn = getFoxPro().getConnection();
            String sql = "SELECT * FROM FoxPro.EstadoCliente ";
            String where = "WHERE codigo = "+_codigo+";";
            PreparedStatement ps = conn.prepareStatement(sql+where);
            ResultSet result     = ps.executeQuery();
            if(result.next()){
                EstadoCliente resp = new EstadoCliente();
                resp.setId(         result.getInt("idCliente"));
                resp.setCodigo(     result.getInt("codigo"));
                resp.setNombre(     result.getString("nombre"));
                resp.setRif(        result.getString("rif"));
                resp.setCiudad(     result.getString("ciudad"));
                resp.setZona(       result.getString("zona"));
                resp.setNdevo(      result.getInt("ndevo"));
                resp.setMdevo(      result.getDouble("mdevo"));
                resp.setN15(        result.getInt("n15"));
                resp.setM15(        result.getDouble("m15"));
                resp.setN30(        result.getInt("n30"));
                resp.setM30(        result.getDouble("m30"));
                resp.setN45(        result.getInt("n45"));
                resp.setM45(        result.getDouble("m45"));
                resp.setN60(        result.getInt("n60"));
                resp.setM60(        result.getDouble("m60"));
                resp.setN90(        result.getInt("n90"));
                resp.setM90(        result.getDouble("m90"));
                resp.setN120(       result.getInt("n120"));
                resp.setM120(       result.getDouble("m120"));
                resp.setN121(       result.getInt("n121"));
                resp.setM121(       result.getDouble("m121"));
                return resp;
            }else{
                return null;
            }
        }catch(NamingException nex){
            
        }catch(SQLException sqlex){
            
        }
        return null;
    }
    /**
     * Restaura una sesion que aun no se ha finalizado.
     * Recibe una variable tipo Integer y retorna un objeto estático tipo Sesion.
     * Busca en BD si ya existe un registro. Si existe asigna al objeto Sesion los parametros encontrados.
     * @param _id Variable tipo Integer distinta a 0.
     * @return Objeto tipo Sesion que retornara con o sin parametros dependiendo de la existencia o no del id.
     */
    public static Sesion restaurarSesion(int _id){   
        Sesion sesion= new Sesion();
        try{
            Connection conn = BaseDatos.getConexionDiga(); 
            //validar si existe una sesion abierta
            //retornar int notificando sesion ya abierta
            String buscar = "SELECT inicio FROM Bd.Sesion ";
            String where = "WHERE idSesion = "+_id;
            String sql = buscar + where;
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            
            while(rs.next()){
                sesion.setId(_id);
                sesion.setHoraIni(rs.getString("inicio"));
                sesion.setStatus(1);
            }               
            conn.close();
        }catch(Exception e){
            System.out.println("Error restaurando "+ e);
        }
        return sesion;
    }
    /**
     * Obtiene el id de usuario a partir de su nombre de usuario y contraseña.
     * Recibe dos variables tipo cadena.
     * Busca en BD si las variables coinciden con los valores que existen.
     * Si coinciden retorna el id del usuario.
     * @param _user Variable tipo cadena distinta a null o conjunto de espacios.
     * @param _pswd Variable tipo contraseña distinta a null o conjunto de espacios.
     * @return objeto estatico tipo Integer con el id de Usuario si hay conicidencia con los valores entrantes.
     */
    public static int getUserId(String _user,String _pswd){
        if (!_user.trim().equals("") || _user!=null || _pswd.trim().equals("") || _pswd!=null){
            try{
                Connection conn = BaseDatos.getConexionDiga(); 
                //validar si existe una sesion abierta
                //retornar int notificando sesion ya abierta
                String buscar = "SELECT idUsuario FROM Diga.Usuario u ";
                String where = "WHERE u.usuario LIKE BINARY '"+_user+"' AND u.pswd LIKE BINARY '"+_pswd+"';";
                String sql = buscar + where;
                PreparedStatement ps = conn.prepareStatement(sql);
                ResultSet rs = ps.executeQuery();

                if(rs.next()){  
                    return rs.getInt("idUsuario");                
                }               
                conn.close();
            }catch(Exception e){
                System.out.println("Error obteniendo el Usuario");
            }
        }
        return -1;
    }
}
